#include "timer5_driver.h"
#include "gd32f4xx_gpio.h"
#include "systick.h"
#include "gd32f4xx_timer.h"
#include "gd32f4xx_rcu.h"
#include "gd32f4xx.h"
#include "systick.h"

extern void onTimer5Interrupt(void);

void timer5_driver_config()
{
    rcu_periph_clock_enable(RCU_TIMER5);
    // 初始化
    timer_deinit(TIMER5);

    // 对apb1总线倍频,置为160MHz(=168,000,000Hz)
    // rcu_timer_clock_prescale_config(RCU_TIMER_PSC_MUL4);
    // rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);

    // 声明结构体
    timer_parameter_struct tps;

    // 初始化结构体
    timer_struct_para_init(&tps);

    // 配置分频系数
    tps.prescaler = 10000; // 降频10000倍,变为16800hz

    // 配置CAR
    tps.period = 1680; // 稳定100ms的周期(中断)

    // 将结构体传入配置函数,对定时器进行配置
    timer_init(TIMER5, &tps); // 初始化

    // 打开中断功能
    // timer_int_up:中断更新事件,(car将计数器归零)
    timer_interrupt_enable(TIMER5, TIMER_INT_UP);

    // 中断优先级,必须设置
    nvic_irq_enable(TIMER5_DAC_IRQn, 2, 2);

    // 打开中断开关
    timer_enable(TIMER5);
}

void TIMER5_DAC_IRQHandler(void)
{
    if (timer_interrupt_flag_get(TIMER5, TIMER_INT_UP) == SET)
    {
        timer_interrupt_flag_clear(TIMER5, TIMER_INT_UP);
        onTimer5Interrupt();
    }
}
